home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 05 Programming / CWIND.ARC / LIB.C < prev    next >
Text File  |  2019-04-13  |  10KB  |  422 lines

  1. /*
  2.     ├REATE AND MAINTAIN LIBRARY FILES.
  3.     ╠IBRARY FILE NAMES MUST END
  4.     WITH  ".L"
  5. */
  6.  
  7. #INCLUDE <STDIO.H>
  8. #INCLUDE <STRINGS.H>
  9.  
  10. #DEFINE  ═┴╪╠╔┬   200
  11. #DEFINE  ═┴╪╔─     20
  12. #DEFINE  ═┴╪╠╔╬┼   81
  13. #DEFINE  ╔╬╓┴╠╔─  255
  14. #DEFINE  ├╧═╠╔═╔╘   7
  15. #DEFINE  ├╟╥┼╘╒╥╬  13
  16. #DEFINE  ─┼╠┼╘┼    20
  17.  
  18. EXTERN CHAR ┬EEP╧N;
  19.  
  20. CHAR IDS[═┴╪╠╔┬][═┴╪╔─], FILES[═┴╪╠╔┬][═┴╪╔─], INBUF[═┴╪╠╔╬┼];
  21. CHAR GETCMD (), GETKEY (), TOUPPER (), CRSGET (), ╧PEN╫INDOW (), SIZE;
  22. UNSIGNED GETVALUE ();
  23.  
  24. MAIN()
  25.     CHAR ╔NFO╔─, ╠IB╔─, ╔N╔─;
  26.     UNSIGNED N;
  27.     STATIC CHAR *COMMANDS[├╧═╠╔═╔╘] = █
  28.                     "╠╧┴─",   "╙┴╓┼",
  29.                     "├╠┼┴╥",  "─╔╙╨╠┴┘",
  30.                     "┴──",    "╥┼═╧╓┼",
  31.                     "╤╒╔╘"
  32.                     ▌;
  33.  
  34.     HIGHMEM (0XC400);       /* SET MEMORY BOUNDARIES */
  35.     ╔NIT╙CRN ();            /* INITIALIZE ├-╫INDOWS SYSTEM */
  36.     ╔NIT╫INDOWS ();         /* INITIALIZE WINDOW ALLOCATION TABLE */
  37.     ╔NIT╙ET (2);            /* GO INTO 80 COLUMN MODE */
  38.     IF ( !(╔NFO╔─ = ╧PEN╫INDOW (3, 14, 64, 9, "\22 ─EMO ╔NFO "))) █
  39.        ╥ESET╙CREEN ();
  40.        EXIT();
  41.        ▌
  42.     PRINTF ("\N╠IB ─EMO VERSION - 14/1/88");
  43.     PRINTF ("\N╠IB MODIFIED TO OPERATE UNDER ├-╫╔╬─╧╫╙ ╓1.11 BY ╥UBENS ┴BBOUD");
  44.     PRINTF ("\N\N╠╔┬ ╒TILITY ORIGINALLY BY ╨RO-╠INE ╙OFTWARE");
  45.     PRINTF ("\N├-╫╔╬─╧╫╙ ╓1.11 (C)1987 BY ╥UBENS ┴BBOUD.\N");
  46.     WAIT ();
  47.     IF ( !(╠IB╔─ = ╧PEN╫INDOW (10, 3, 40, 11, " ═AIN ═ENU "))) █
  48.        ╥ESET╙CREEN ();
  49.        EXIT();
  50.        ▌
  51.     SIZE = 0;
  52.     CLRSCRN();
  53.     PRINTF ("\N\N╠╧┴─    - ╠OAD LIBRARY\N");
  54.     PRINTF ("╙┴╓┼    - ╙AVE LIBRARY\N");
  55.     PRINTF ("├╠┼┴╥   - ├LEAR LIBRARY\N");
  56.     PRINTF ("─╔╙╨╠┴┘ - ─ISPLAY LIBRARY\N");
  57.     PRINTF ("┴──     - ┴DD MODULES TO LIBRARY\N");
  58.     PRINTF ("╥┼═╧╓┼  - ╥EMOVE MODULES FROM LIBRARY\N");
  59.     PRINTF ("╤╒╔╘    - ╤UIT\N");
  60.     IF ( !(╔N╔─ = ╧PEN╫INDOW (50, 8, 25, 12, "\22 ╔NPUT ╥EQUEST "))) █
  61.        ╥ESET╙CREEN ();
  62.        EXIT();
  63.        ▌
  64.     FOR (;;) █
  65.         PRINTF ("\N├MD: ");
  66.         SWITCH (GETCMD (INBUF, COMMANDS, 7, 7)) █
  67.                 CASE 0:
  68.                           LOAD();
  69.                           BREAK;
  70.                 CASE 1:
  71.                           SAVE();
  72.                           BREAK;
  73.                 CASE 2:
  74.                           SIZE = 0;
  75.                           BREAK;
  76.                 CASE 3:
  77.                           DISPLAY();
  78.                           BREAK;
  79.                 CASE 4:
  80.                           ADD();
  81.                           BREAK;
  82.                 CASE 5:
  83.                           REMOVE();
  84.                           BREAK;
  85.                 CASE 6:
  86.                           ╥ESET╙CREEN ();
  87.                           PUTCHAR ('\N');
  88.                           EXIT();
  89.                 DEFAULT:
  90.                           PRINTF ("\N** ╔NVALID ├HOICE\N");
  91.                 ▌
  92.         ▌
  93.  
  94.  
  95. CLRSCRN()
  96.     PUTCHAR ('ô');
  97.  
  98.  
  99. ╞╔╠┼ OPENLIB (MODE)
  100. CHAR *MODE;
  101.     ╞╔╠┼ F;
  102.  
  103.     PRINTF ("\N\NLIBRARY FILE NAME: ");
  104.     GETVALUE (INBUF, 1, 16, 0);
  105.     F = FOPEN (INBUF, MODE);
  106.     IF (F == ╬╒╠╠ ▀▀ FERROR()) █
  107.         F = ╬╒╠╠;
  108.         PRINTF ("\N\NCAN'T OPEN %S\N", INBUF);
  109.         WAIT();
  110.     ▌
  111.     RETURN F;
  112.  
  113.  
  114. LOAD()
  115.     CHAR ╠OAD╔─;
  116.     ╞╔╠┼ F;
  117.     UNSIGNED I;
  118.  
  119.     IF ( !(╠OAD╔─ = ╧PEN╫INDOW (20, 10, 40, 10, " ╠OAD ")))
  120.        RETURN;
  121.     IF ((F = OPENLIB ("R")) == ╬╒╠╠) █
  122.        ├LOSE╫INDOW (╠OAD╔─);
  123.        RETURN;
  124.        ▌
  125.     SIZE = GETC(F);
  126.     FOR (I = 0; I < SIZE; I++) █
  127.         GETID (IDS[I], F);
  128.         GETID (FILES[I], F);
  129.         ▌
  130.     FCLOSE(F);
  131.     ├LOSE╫INDOW (╠OAD╔─);
  132.  
  133.  
  134. GETID (S, F)
  135. CHAR *S;
  136. ╞╔╠┼ F;
  137.     WHILE (*S++ = GETC(F))
  138.        ;
  139.  
  140.  
  141. SAVE()
  142.     CHAR ╙AVE╔─;
  143.     ╞╔╠┼ F;
  144.     UNSIGNED I;
  145.  
  146.     IF ( !(╙AVE╔─ = ╧PEN╫INDOW (5, 5, 40, 10, " ╙AVE ")))
  147.        RETURN;
  148.     IF ((F = OPENLIB ("W")) == ╬╒╠╠) █
  149.        ├LOSE╫INDOW (╙AVE╔─);
  150.        RETURN;
  151.        ▌
  152.     PUTC (SIZE, F);
  153.     FOR (I = 0; I < SIZE; I++)
  154.         FPRINTF (F, "%S%C%S%C", IDS[I], 0, FILES[I], 0);
  155.     FCLOSE(F);
  156.     ├LOSE╫INDOW (╙AVE╔─);
  157.  
  158.  
  159. WAIT()
  160.     PRINTF ("\NHIT ╥┼╘╒╥╬ TO CONTINUE");
  161.     WHILE (GETCH() != '\N')
  162.         ;
  163.  
  164.  
  165. DISPLAY()
  166.     CHAR ─ISP╔─;
  167.     UNSIGNED I, LINE;
  168.  
  169.     IF (!(─ISP╔─ = ╧PEN╫INDOW (30, 1, 40, 23, " ─ISPLAY ")))
  170.        RETURN;
  171.     LINE = 1;
  172.     FOR (I = 0; I < SIZE; I++) █
  173.         IF (LINE == 1) █
  174.             CLRSCRN();
  175.             PRINTF ("\N%C%-20S%-19S\N\N", 18, "╔─┼╬╘╔╞╔┼╥", "╞╔╠┼");
  176.             LINE = 3;
  177.             ▌
  178.         PRINTF ("%-20S%-19S\N", IDS[I], FILES[I]);
  179.         LINE++;
  180.         IF (LINE == 21) █
  181.             WAIT();
  182.             LINE = 1;
  183.         ▌
  184.     ▌
  185.     WAIT();
  186.     ├LOSE╫INDOW (─ISP╔─);
  187.  
  188.  
  189. GETCH()
  190.     CHAR A, X, Y;
  191.  
  192.     DO
  193.         SYS (0XFFE4, &A, &X, &Y);
  194.     WHILE (A == 0);
  195.     RETURN A;
  196.  
  197.  
  198. ADD()
  199.     CHAR ┴DD╔─;
  200.     UNSIGNED N;
  201.     ╞╔╠┼ F;
  202.  
  203.     IF ( !(┴DD╔─ = ╧PEN╫INDOW (15, 7, 35, 14, " ┴DD ")))
  204.        RETURN;
  205.     PRINTF ("\NHIT ╥┼╘╒╥╬ WHEN DONE\N");
  206.     FOR (;;) █
  207.         PRINTF ("\NOBJECT FILE NAME: ");
  208.         GETVALUE (INBUF, 1, 16, 0);
  209.         IF (!ISALPHA(*INBUF)) █
  210.            ├LOSE╫INDOW (┴DD╔─);
  211.            RETURN;
  212.            ▌
  213.         F = FOPEN (INBUF, "R");
  214.         IF (F == ╬╒╠╠ ▀▀ FERROR())
  215.             PRINTF ("CAN'T OPEN %S\N", INBUF);
  216.         ELSE █
  217.             N = GETW(F);
  218.             WHILE (N--)
  219.                 GETC(F);
  220.             N = GETW(F);
  221.             WHILE (N--)
  222.                 GETW(F);
  223.             N = GETW(F);
  224.             WHILE (N-- && SIZE < ═┴╪╠╔┬) █
  225.                 GETID (IDS[SIZE], F);
  226.                 IF (ISALPHA(*IDS[SIZE]) && ISPRINT(IDS[SIZE][1]))
  227.                     STRCPY (FILES[SIZE++], INBUF);
  228.                 GETC(F);
  229.                 GETW(F);
  230.             ▌        
  231.             FCLOSE (F);
  232.             IF (SIZE == ═┴╪╠╔┬) █
  233.                 PRINTF ("\NLIBRARY IS FULL\N");
  234.                 WAIT();
  235.                 ├LOSE╫INDOW (┴DD╔─);
  236.                 RETURN;
  237.             ▌
  238.         ▌
  239.     ▌
  240.  
  241.  
  242. REMOVE()
  243.     CHAR ╥EMOVE╔─;
  244.     UNSIGNED I, J;
  245.  
  246.     IF ( !(╥EMOVE╔─ = ╧PEN╫INDOW (25, 12, 35, 10, " ╥EMOVE ")))
  247.        RETURN;
  248.     PRINTF ("\NHIT ╥┼╘╒╥╬ WHEN DONE\N");
  249.     FOR (;;) █
  250.         PRINTF ("\NFILE TO DELETE: ");
  251.         GETVALUE (INBUF, 1, 16, 0);
  252.         IF (!ISALPHA(*INBUF)) █
  253.            ├LOSE╫INDOW (╥EMOVE╔─);
  254.            RETURN;
  255.            ▌
  256.         FOR (I = 0; I < SIZE && STRCMP(FILES[I], INBUF) != 0; I++)
  257.             ;
  258.         IF (I == SIZE)
  259.             PRINTF ("\NFILE NOT FOUND\N");
  260.         ELSE █
  261.             WHILE (I < SIZE && STRCMP (FILES[I], INBUF) == 0) █
  262.                 FOR (J = I; J+1 < SIZE; J++) █
  263.                     STRCPY (FILES[J], FILES[J+1]);
  264.                     STRCPY (IDS[J], IDS[J+1]);
  265.                 ▌
  266.                 SIZE--;
  267.             ▌
  268.         ▌
  269.     ▌
  270.  
  271.  
  272. /* ================================== */
  273. /*                                    */
  274. /* ╟ET COMMMAND AND RETURN COMMAND #  */
  275. /*                                    */
  276. /* ╙IZE INDICATES MAX INPUT LENGTH.   */
  277. /* ╠IMIT INDICATES NUMBER OF COMMANDS */
  278. /* IN THE CMPVAL COMMAND TABLE.       */
  279. /* ================================== */
  280.  
  281. CHAR GETCMD (INVAL, CMPVAL, SIZE, LIMIT)
  282. CHAR INVAL[], *CMPVAL[], LIMIT, SIZE;
  283.     CHAR CTR;
  284.     UNSIGNED INDX;
  285.  
  286.     IF ((INDX = GETVALUE (INVAL, 1, SIZE, 1)) > 0) █
  287.        FOR (CTR = 0; CTR < LIMIT; CTR++) █
  288.            IF (!STRNCMP (INVAL, CMPVAL[CTR], INDX)) █
  289.               PRINTF ("%S", CMPVAL[CTR] + INDX);
  290.               RETURN (CTR);
  291.               ▌
  292.            ▌
  293.        ▌
  294.     RETURN (╔╬╓┴╠╔─);
  295.  
  296.  
  297.  
  298. /* ================================== */
  299. /*                                    */
  300. /* ╟ET A STRING, OR NUMERICAL VALUE   */
  301. /*                                    */
  302. /* ═ODE == 0 RETURNS A POSITIVE INT.  */
  303. /* ═ODE == 1 RETURNS THE LENGTH OF    */
  304. /* THE STRING LEFT AT WORKAREA.       */
  305. /* ╙IZE SPECIFIES THE FIELD LENGTH    */
  306. /* ╒LCASE == 0 DISPLAYS VALUE AS IS   */
  307. /* ╒LCASE == 1 DISPLAYS AND CONVERTS  */
  308. /* THE CHARACTERS TO UPPER CASE.      */
  309. /* ================================== */
  310.  
  311. UNSIGNED GETVALUE (WORKAREA, MODE, SIZE, ULCASE)
  312. UNSIGNED MODE, SIZE, ULCASE;
  313. CHAR WORKAREA[];
  314.     UNSIGNED CNTR = 0;
  315.     CHAR HOLD;
  316.  
  317.     WHILE ((HOLD = CRSGET ()) != ├╟╥┼╘╒╥╬) █
  318.           IF (HOLD != ─┼╠┼╘┼) █
  319.              IF (CNTR < SIZE) █
  320.                 IF (MODE == 0) █
  321.                    IF (ISDIGIT (HOLD) && CNTR < SIZE) █
  322.                       PUTCHAR (HOLD);
  323.                       WORKAREA[CNTR++] = HOLD;
  324.                       ▌
  325.                    ▌
  326.                 ELSE █
  327.                    WORKAREA[CNTR++] = (ULCASE ? (HOLD = TOUPPER (HOLD)) : HOLD);
  328.                    PUTCHAR (HOLD);
  329.                    ▌
  330.                 ▌
  331.              ▌
  332.           ELSE █
  333.              IF (CNTR > 0) █
  334.                 PRINTF ("%C %C", 157, 157);
  335.                 CNTR--;
  336.                 ▌
  337.              ▌
  338.           ▌
  339.     WORKAREA[CNTR] = '\0';
  340.     IF (MODE == 0)
  341.        RETURN ((UNSIGNED) (ATOI (WORKAREA)));
  342.     ELSE
  343.        RETURN ((UNSIGNED) CNTR);
  344.  
  345.  
  346.  
  347. /* ================================== */
  348. /*                                    */
  349. /* ├HARACTER ╟┼╘, WITH CURSOR         */
  350. /*                                    */
  351. /* ================================== */
  352.  
  353. CHAR CRSGET ()
  354.    CHAR CH, DUMMY;
  355.  
  356.    DO █
  357.       SYS (0XFFE4, &CH, &DUMMY, &DUMMY);
  358.       IF (CH  == ├╟╥┼╘╒╥╬ ▀▀ CH == ─┼╠┼╘┼)
  359.          BREAK;
  360.       PRINTF ("ñ%C %C", 157, 157); 
  361.       ▌
  362.    WHILE (!(ISALNUM (CH) ▀▀ ISSPACE (CH) ▀▀ ISPUNCT (CH) ▀▀ (CH > 159 && CH < 224)));
  363.    RETURN (CH);
  364.  
  365.  
  366.  
  367. /* ================================== */
  368. /*                                    */
  369. /* ╬ON-WAITING CHARACTER ╟┼╘          */
  370. /*                                    */
  371. /* ================================== */
  372.  
  373. CHAR GETKEY ()
  374.     CHAR A, DUMMY;
  375.  
  376.     SYS (0XFFE4, &A, &DUMMY, &DUMMY);
  377.     RETURN (A);
  378.  
  379.  
  380.  
  381. /* ================================== */
  382. /*                                    */
  383. /* ├ASE CONVERSION ROUTINES           */
  384. /*                                    */
  385. /* ================================== */
  386.  
  387. CHAR TOUPPER (CNVRT)
  388. CHAR CNVRT;
  389.     RETURN (((ISLOWER (CNVRT)) ? (CNVRT + 128) : CNVRT));
  390.